如何在Qt QML TableView单元格中画圆? 您所在的位置:网站首页 qt 画圆圈 如何在Qt QML TableView单元格中画圆?

如何在Qt QML TableView单元格中画圆?

#如何在Qt QML TableView单元格中画圆?| 来源: 网络整理| 查看: 265

我已经能够在averageAge字段中画出正确的圆。

我的ModelItem看起来像这样:

struct ModelItem { Q_GADGET Q_PROPERTY( QString population MEMBER population ) Q_PROPERTY( int averageAge MEMBER averageAge ) Q_PROPERTY( bool selected MEMBER selected ) public: enum class Role { Selection = Qt::UserRole, ColumnType, ColorValue }; Q_ENUM(Role) QString population; int averageAge; bool selected { false }; bool operator!=( const ModelItem& other ) { return other.population != this->population || other.averageAge != this->averageAge; } };

这里的关键点是ColumnType和ColorValue角色的定义。

我的自定义角色需要一个roleNames函数

QHash ModelList:: roleNames() const { return { { Qt::DisplayRole, "display" }, { int( ModelItem::Role::Selection ), "selected" }, { int( ModelItem::Role::ColumnType ), "type" }, { int( ModelItem::Role::ColorValue ), "colorValue" } }; }

自定义角色需要由roleNames提供,并指定字符串"type“和"colorValue”。

我的数据函数如下所示:

QVariant ModelList:: data( const QModelIndex& index, int role ) const { const ModelItem modelItem = mList.at( index.row() ); QVariant result = QVariant(); if ( role == Qt::DisplayRole ) { if ( index.column() == 0 ) { result = QVariant( QString( modelItem.population ) ); } else { result = QVariant( QString::number( modelItem.averageAge ) ); } } if ( role == int( ModelItem::Role::Selection ) ) { result = QVariant( QString( modelItem.selected ? "#eeeeee" : "white" ) ); } if ( role == int( ModelItem::Role::ColumnType ) ) { if ( index.column() == 0 ) result = QVariant( QString( "stringValue" ) ); else result = QVariant( QString( "colorValue" ) ); } if ( role == int( ModelItem::Role::ColorValue ) ) { QString color; if ( modelItem.averageAge < 13 ) color = "red"; else if ( modelItem.averageAge < 35 ) color = "yellow"; else color = "green"; result = QVariant( color ); } qDebug()


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有